<?php
/**
* TopSites - Компонент каталога ссылок для Joostina CMS.
* @author:      Лаборатория сайтов, http://sitelab.net.ru
* @version:     1.9
* @release:     2010.02.07
* @package:     com_topsites
* @copyright:   (C) 2010 http://sitelab.net.ru,  see /administrator/components/com_topsites/copyright.php
* @license:     http://www.gnu.org/copyleft/gpl.html GNU/GPL
**/	   
defined( '_VALID_MOS' ) or die( '' );

// подключим класс для работы с иконками
require_once( dirname(__FILE__).'/class.ico.php' );  


function applyMambots( &$links, $lenght_descr ) {
	global $_MAMBOTS, $mtconf;

	$_MAMBOTS->loadBotGroup( 'content' );

	for( $i=0; $i<count($links); $i++ ) {
		$params = '';												   
		$allowedTags = '<br><b><h1><h2><h3><h4><h5><h6><img><li><ol><p>'
	                 . '<strong><u><ul><em><dd><dt><dl><span><div><del><add><i><hr>'
    	             . '<pre><br><blockquote><address><code><caption><abbr><acronym>'
        	         . '<cite><dfn><q><ins><sup><sub><kbd><samp><var><tt><small><big>'
            	    ;

		$links[$i]->text =   substr(strip_tags($links[$i]->description, $allowedTags), 0, $lenght_descr);
		
		if  ((strlen($links[$i]->description)) > $lenght_descr) {
			$links[$i]->text .= ' <b>...</b>';
		}

		$links[$i]->title = $links[$i]->name;

		$results = $_MAMBOTS->trigger( 'onPrepareContent', array( &$links[$i], &$params, 0 ), true );			
		}

}


/*-----------------------------------------------------
// Сохранить иконку сайта к себе на сервер
------------------------------------------------------*/
function savefavicon($url, $fname)
{ global $mosConfig_absolute_path;	   
  $ico = new Ico($url);	
  if ($ico->ico_exists) { 		   
	  $TotalIcons = $ico->TotalIcons(); 
	  $img = $ico->GetIcon(0); 
	  imagePng ($img, $fname); 
	  imageDestroy($img);
  }
  unset($ico);
}


/*-----------------------------------------------------
// След функции меняют способ отображения переноса строки
------------------------------------------------------*/
function nl_2_br( $text ) {

	$text = preg_replace( array( '/\r/', '/^\n+/', '/\n+$/'), '', $text );
	$text = preg_replace( '/\n/', '<br />', $text );
		
	return $text;
}

function br_2_nl( $text ) {
	        
	 return str_replace('<br />', "\n", $text);
}



/*-----------------------------------------------------
// Доп. функция для удаления опасных сиволов
------------------------------------------------------*/
function pregtrim($str) {
   return preg_replace("/[^\x20-\xFF]/","",@strval($str));
}

/*-----------------------------------------------------
// Проверяет корректность введеного URL и возвращает:
//  *  +1, если URL пуст                    
//        if (checkurl($url)==1) echo "пусто"
//  *  -1, если URL не пуст, но с ошибками
//        if (checkurl($url)==-1) echo "ошибка"
//  *  строку (новый URL), если URL найден и отпарсен
//        if (checkurl($url)==0) echo "все ок"
//        либо if (strlen(checkurl($url))>1) echo "все ок"
//
//  Если протокола не было в URL, он будет добавлен ("http://")
------------------------------------------------------*/
function checkurl($url) {
   // режем левые символы и крайние пробелы
   $url=trim(pregtrim($url));
   // если пусто - выход
   if (strlen($url)===0) return 1;
   //проверяем УРЛ на правильность
   if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
   "(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
   "org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
   "!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
   "?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $url, $ok))
   return -1; // если не правильно - выход

   // если нет протокала - добавить
   if (!strstr($url,"://")) $url="http://".$url;

   // заменить протокол на нижний регистр: hTtP -> http
   //$url=preg_replace("~^[a-z]+~ie","strtolower('\\0')", $url);
   $url = strtolower($url);
   return $url;
}


/*-----------------------------------------------------
// Функции для работы с категориями
------------------------------------------------------*/
// Отобразить лист категорий
function list_category($id,$cid,$name,$opt,$topopts='',$shwarry='',$only_published=false) {

    $rezstr= "<SELECT NAME=\"$name\" class=\"inputbox\" $opt>\n";
    $rezstr.= $topopts;
    $rezstr.=list_tree($id,$cid,0,0,$shwarry,$only_published);
    $rezstr.="</SELECT>\n";
        return $rezstr;

  }


function list_tree($id=0,$cid=0,$catid=0, $level=0, $shwarry='',$only_published=false) {
    $database = &database::getInstance();

    $level++;

    $q = "SELECT * FROM #__topsites_categories ";
    $q .= "WHERE cat_parent=".$catid ;
        if ($only_published) 
		$q.=" AND published=1 ";
        if ($shwarry) 
		$q.=" AND id IN (".$shwarry.")";
    $q .= " ORDER BY ordering" ;
    $database->setQuery($q);
        $rows = $database->loadObjectList();
        $rez="";
    foreach ($rows as $row)
         if (!($row->id===$id)) {
          if ($row->id===$cid)         
		  $rez.= "<option value=\"" . $row->id . "\" selected>\n";
          else         
		  $rez.= "<option value=\"" . $row->id . "\">\n";

      for ($i=0;$i<($level-1);$i++)          
	  $rez.= "&nbsp;";
          if ($level>1) $rez.= "&#151&nbsp;";


      $rez.=  $row->name . "</option>";
      $rez.=list_tree($id, $cid, $row->id, $level,$shwarry,$only_published);
    }
        return $rez;
}

function get_f_cats() {
        $database = &database::getInstance();
        $database->setQuery( "SELECT cc.id FROM #__topsites_categories AS cc"
        . "\nLEFT JOIN #__topsites AS a ON a.catid = cc.id "
        . "\nWHERE a.published='1' AND cc.published=1"
        . "\n AND a.expiredate>NOW() ORDER BY cc.ordering"
        );
        $cats = $database->loadObjectList();
        echo $database->getErrorMsg();
        $database->setQuery( "SELECT cat_parent as id FROM #__topsites_categories WHERE cat_parent<>0 AND published='1' ORDER BY ordering");
        $cats = array_merge( $cats, $database->loadObjectList() );
        $carr=array();
        foreach ($cats as $cat) if (!in_array($cat->id,$carr)) array_push($carr,$cat->id);
        $ret=implode(",",$carr);
        return $ret;
}

function get_cat_path($catid,$top=0) {
        $database = &database::getInstance();
        $database->setQuery( "SELECT id,cat_parent,name FROM #__topsites_categories "
        . "\nWHERE id=".$catid." ORDER BY ordering");
        $cats = $database->loadObjectList();
        $cat=$cats[0];
        if (!($cat->cat_parent===$top)) 
		$cats=array_merge(get_cat_path($cat->cat_parent,$top),$cats);
        return $cats;
}

function get_cat_tree($catid=0,$only_published=false) {
        $database = &database::getInstance();
        if ($only_published) 
		$publ=" AND published=1 ";
        else 
		$publ="";
        $database->setQuery( "SELECT id,cat_parent,name FROM #__topsites_categories "
        . "\nWHERE cat_parent=".$catid.$publ." ORDER BY ordering");
        $cats = $database->loadObjectList();
        $tmp=array();
        if (count($cats)>0) {
                foreach ($cats as $cat)         
				$tmp=array_merge($tmp,get_cat_tree($cat->id,$only_published));
        }
        $cats=array_merge($cats,$tmp);
        return $cats;
}

function get_cat_ad_count($catid, $type=0) {
                $database = &database::getInstance();
                $subarr=extract_id(get_cat_tree($catid));
                array_push($subarr,$catid);
            $where = "catid IN (".implode(",",$subarr).")";
                if ($type>0) 
				$typewhere="AND type=".$type;
                else 
				$typewhere="";
                $database->setQuery( "SELECT count(*) FROM #__topsites "
                . "\nWHERE ".$where." ".$typewhere);
                $res = $database->loadResult();
                return $res;
}

function get_cat_ad_count_special(&$rows,$catid, $type=0) {
                $database = &database::getInstance();
                $subarr=extract_id(get_cat_tree($catid));
                array_push($subarr,$catid);
                $res=0;
                foreach ($rows as $row) {
                        $typ=true;
                        if ($type && !($row->type===$type)) 
						$typ=false;
                        if (in_array($row->catid,$subarr) && $typ) 
						$res++;
                }
                return $res;
}

function extract_id($catarr) {
                $tmpcarr=array();
                foreach ($catarr as $catpth) array_push($tmpcarr,$catpth->id);
                return $tmpcarr;
}


function get_cat_path_titles($catid, $delim=" > ", $top=0) {
        $ret="";
        if ($catid) {
                $catarr=get_cat_path($catid,$top);
                $tmparr=array();
                foreach ($catarr as $catpth) array_push($tmparr, $catpth->name);
                $ret=implode($delim,$tmparr);
        }
        return $ret;
}

function get_cat_path_links($catid, $lnk, $delim=" > ") {
        $ret="";
        if ($catid) {
                $catarr=get_cat_path($catid);
                $tmparr=array();
                foreach ($catarr as $catpth) {
                         $p='<a href="'.$lnk.$catpth->id.'"">'.$catpth->name."</a>";
                         array_push($tmparr, $p);
                }
                $ret=implode($delim,$tmparr);
        }
        return $ret;
}

function get_cat_path_links_full($catid, $lnk, $delim=" > ") {
        $ret="";
        if ($catid) {
                $catarr=get_cat_path($catid);
                $tmparr=array();
                for ($i=0; $i<(count($catarr)-1); $i++) {
                         $pom=$catarr[$i];
                         $p='<a href="'.$lnk.$pom->id.'"">'.$pom->name."</a>";
                         array_push($tmparr, $p);
                }
                $last=$catarr[count($catarr)-1];
                if (count($catarr)>1) $dl=$delim; else $dl="";
                $ret=implode($delim,$tmparr).$dl.$last->name;
        }
        return $ret;
}

function get_cat_path_links_full_wrap($catid, $lnk, $delim=" > ", $delim2="-") {
        $ret="";
        if ($catid) {
                $catarr=get_cat_path($catid);
                $tmparr=array();
                for ($i=0; $i<(count($catarr)-1); $i++) {
                         $pp="";
                         for ($j=0; $j<$i; $j++) $pp.=$delim2;
                         $pom=$catarr[$i];
                         $p=$pp.$delim.'<a href="'.$lnk.$pom->id.'"">'.$pom->name."</a>";
                         array_push($tmparr, $p);
                }
                $last=$catarr[count($catarr)-1];
                if (count($catarr)>1) $dl="<BR>".$pp.$delim2.$delim; else $dl=$delim;
                $ret=implode("<BR>",$tmparr).$dl.$last->name;
        }
        return $ret;
}

function get_cat_path_links_full_wrap2($catid, $lnk, $delim=" > ", $delim2="") {
        $ret="";
        if ($catid) {
                $catarr=get_cat_path($catid);
                $tmparr=array();
                for ($i=0; $i<(count($catarr)-1); $i++) {
                         $pp="";
                         for ($j=0; $j<$i; $j++) $pp.=$delim2;
                         $pom=$catarr[$i];
                         $p=$delim.$pom->name;
                         array_push($tmparr, $p);
                }
                $last=$catarr[count($catarr)-1];
                if (count($catarr)>1) $dl="".$pp.$delim2.$delim; 
				else $dl=$delim;
                $ret=implode("",$tmparr).$dl.$last->name;
        }
        return $ret;
}


?>